package com.decent.common.util;

import cn.hutool.core.util.StrUtil;

import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 枚举 字符串 相互转换
 *
 * @author sunxy
 * @date 2021/6/8 9:42
 */
@SuppressWarnings("unused")
public class EnumStringUtil {

    /**
     * 判断字符串用逗号分割之后的集合
     * 是否都是某个枚举的name
     *
     * @param info 字符串
     * @param e    枚举Class
     * @return boolean
     */
    public static boolean isLegitimate(String info, Class<? extends Enum<?>> e) {
        if (StrUtil.isBlank(info) || Objects.isNull(e)) {
            return false;
        }
        Set<String> nameSet = Arrays.stream(e.getEnumConstants())
                .map(Enum::name).collect(Collectors.toSet());
        return nameSet.containsAll(StrUtil.split(info, ","));
    }

    /**
     * 判断枚举名是否合法
     *
     * @param name 枚举名
     * @param e    枚举Class
     * @return boolean
     */
    public static boolean isContains(String name, Class<? extends Enum<?>> e) {
        if (StrUtil.isBlank(name) || Objects.isNull(e)) {
            return false;
        }
        Set<String> nameSet = Arrays.stream(e.getEnumConstants())
                .map(Enum::name).collect(Collectors.toSet());
        return StrUtil.split(name, ",").stream().anyMatch(nameSet::contains);
    }

}
